使用Python爬取小红书笔记与评论(仅供参考与学习上交流) 您所在的位置:网站首页 推文 小红书 使用Python爬取小红书笔记与评论(仅供参考与学习上交流)

使用Python爬取小红书笔记与评论(仅供参考与学习上交流)

2024-07-10 00:09| 来源: 网络整理| 查看: 265

文章目录 1. 写在前面2. 分析加密入口3. 使用JS注入4. 爬虫工程化

【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作! 【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》 未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

  目前大部分的小伙伴可能或多或少都需要一些基础的笔记或者评论数据进行分析!有的可能想要通过一些关键词进行搜索,获取一些精准领域的内容。从技术角度来说,在作者之前的文章中我们除了通过对x-s、x-s-common参数进行逆向分析还原外,还可以通过JS注入免扣加密算法的RPC方案去提取获取到加密参数,再通过协议请求获取数据!

但是,不管哪一种方案对于没有爬虫以及编程经验的人来说无疑是有一定难度与门槛的!

所以,在此前的一段时间内。作者也是尝试并封装了以下API的一些小工具或者脚本测试:

关键词搜索笔记获取评论获取评论区艾特多级评论获取扫码协议登录旋转滑块验证码笔记的点赞与收藏游客的小眼睛访问对喜欢的博主进行关注…

如果你是一名开发者且有爬虫逆向的经验!可以去看看作者之前的文章,相关参数加密分析及完整的一些算法在这篇文章:x-s、x-s-common加密纯算法还原(2024-04-27更新)

2. 分析加密入口

在这里插入图片描述

RPC跟注入怎么进行?当然需要先找到加密入口,可以看到上图断点处l包含x-s跟x-t的返回,那么加密操作就在上面完成。看下面这行代码:

l = (a && void 0 !== window._webmsxyw ? window._webmsxyw : encrypt_sign)(s, i) || {};

window._webmsxyw函数内即加密逻辑,在自执行函数内部并添加在了window属性中

该函数接受两个参数,s是api接口的路径,i是请求提交的参数

3. 使用JS注入

这是一种实现思路,提供大家进行参考!相对于纯自动化效率肯定要好,具体方案可以考虑使用Playwright或者pyppeteer实现,通过浏览器的JavaScript注入来获取到加密参数,实现方案Demo分别如下所示:

Playwright实现示例 import asyncio from playwright.async_api import async_playwright async def main(): async with async_playwright() as playwright: browser = await playwright.chromium.launch(headless=True) page = await browser.new_page() # 注入stealth.min.js脚本 await page.add_init_script(path="stealth.min.js") url = "" # 请求api data = "" # 请求参数 # 执行JavaScript encrypt_params = await page.evaluate('([url, data]) => window._webmsxyw(url, data)', [url, data]) local_storage = await page.evaluate('() => window.localStorage') print(encrypt_params) print(local_storage) await browser.close() asyncio.run(main()) pyppeteer实现示例 import asyncio from pyppeteer import launch async def main(): browser = await launch(headless=True) page = await browser.newPage() # 注入stealth.min.js脚本 stealth_script = open("stealth.min.js", "r").read() await page.evaluateOnNewDocument(stealth_script) url = "" # 请求api data = "" # 请求参数 # 执行JavaScript encrypt_params = await page.evaluate('([url, data]) => window._webmsxyw(url, data)', [url, data]) local_storage = await page.evaluate('() => window.localStorage') print(encrypt_params) print(local_storage) await browser.close() asyncio.get_event_loop().run_until_complete(main())

上面的stealth.min.js脚本是一位大佬开源的!注入的作用是为了防止被检测,另外CK参数需要设置属性来避免Web端出现滑动验证码

当然,这个都是最终工程化需要考虑的事情,这里主要还是通过非逆向分析的方式去解决加密参数问题!

window.localStorage在之前加密分析的文章中已经详细介绍了,localStorage是一个在浏览器中存储键值对的API,通常用于持久化地存储数据,所需的b1参数就在其中

JS注入方式运行结果如下所示: 在这里插入图片描述

x-s跟x-t的加密参数通过注入的方式能够直接拿到,但是x-s-common的参数仍需要通过加密算法生成!但是这个参数目前适用的并不多,仍然以x-s参数检测为主

Python版本的sign加密算法在之前的加密分析文章中已分享!注入的方式主要为了获取到这些个参数:x-s、x-t、b1

JS注入的方式对于有前端基础及经验的小伙伴,就很简单了。通过上面的方式获取到所有的加密参数后,接下来就是爬虫的工程化

4. 爬虫工程化

以笔记搜索为例,下面对数据的抓取的示例是采用的协议(非浏览器自动化或注入)的方式。需要注意一下search_id是动态生成的!完整的爬虫代码实现如下所示:

import json import time import random import execjs import requests def base36encode(number, digits='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'): base36 = "" while number: number, i = divmod(number, 36) base36 = digits[i] + base36 return base36.lower() def generate_search_id(): timestamp = int(time.time() * 1000) 'sec-ch-ua': 'Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"', 'Content-Type': 'application/json;charset=UTF-8', 'sec-ch-ua-mobile': '?0', 'Referer': 'https://www.xiaohongshu.com/', 'sec-ch-ua-platform': 'macOS', 'Origin': 'https://www.xiaohongshu.com', 'Cookie': '', # 自行获取 'User-Agent': '' # 自行获取 } with open('xs_xsc20240219.js', 'r', encoding='utf-8') as f: js_script = f.read() context = execjs.compile(js_script) sign = context.call('get_xs_xsc', api_endpoint, search_data, a1_value) headers['x-s'] = sign['X-s'] headers['x-t'] = str(sign['X-t']) headers['X-s-common'] = sign['X-s-common'] response = requests.post(url, headers=headers, data=json.dumps(search_data, separators=(",", ":"), ensure_ascii=False).encode('utf-8')) print(response.json())

最后,如果没有编程与爬虫经验的小伙伴!有研究、学习的需求也可以找作者领取开箱即用的完整项目源码进行学习!当然大家有兴趣的也可以根据文章所提供分享的思路自己进行研究与实现,没有太大难度!可以找作者给予必要的技术指导~

下面,作者也是测试了指定笔记点赞与评论的示例,通过封装接口协议提交完成,如下:

在这里插入图片描述 在这里插入图片描述

关于数据的获取,像笔记关键词搜索出来的所有笔记内容在抓取完成后均会自动存储到本地的Excel文件内,如下所示:

在这里插入图片描述

在这里插入图片描述

笔记所对应的所有评论内容在抓取完成后同样也会存储在本地的Excel文件内,如下所示:

在这里插入图片描述

在这里插入图片描述

获取只需要笔记下面所有的全量一级、二级评论内容,可以直接去指定笔记ID然后获取,如下所示:

在这里插入图片描述

最后!互联网任何公开的数据源有获取数据的需求,可以适当的利用工具与技术来助力。但切记不要滥用,以免对任何第三份平台与网站造成压力与负担!请使用合理、合法、合规、合情的方式去满足自己的需求



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有